Serial buses are now used to interface peripheral devices to a computer system. Examples of these buses include the Universal Serial Bus (USB) and the Institute of Electrical and Electronic Engineers (IEEE) 1394 standard bus. These serial buses provide a simple method of attaching and accessing peripheral devices.
For example, the USB is a new standard that complements the traditional interfaces via the microprocessor bus such as the Peripheral Component Interconnect (PCI), Industry Standard Architecture (ISA), or Enhanced Industry Standard Architecture (EISA) buses. Advantages of the USB include plug and play support, hot attachment, expandability, legacy hardware and software support, and low cost.
A USB-based system typically includes one or more USB clients (USB clients are also referred to interchangeably as “USB devices”, “USB client devices”, etc.), a USB host controller, and one or more hubs. Examples of USB devices are USB-compatible digital cameras, printers, keyboards, scanners, modems, and digital phones. All USB devices attach directly to a USB host (or host controller) or via a USB hub that provides one or more ports. Original USB (USB 1.1) supports two different speeds: 1.5 megabits (Mbits) per second (Mbps) for low-speed devices and 12 MBits/second (Mbps) for high-speed devices. USB 2.0 (Hi-Speed USB) supports a speed of 480 Mbps.
USB makes plugging in new peripherals easy with plug and play, is much faster (approximately 100 times faster) than the original serial port, and supports multiple device connectivity. Because of these benefits, USB is enjoying broad market acceptance. USB allows expandability of the capabilities of a computer via an external port, eliminating the need for users or integrators to open the system chassis. Since USB supports multiple peripheral devices simultaneously, it allows users to run numerous devices such as printers, scanners, digital cameras and speakers from a single computer (for example, a PC). USB also allows for automatic device detection and installation, making connectivity a true plug-and-play experience for end users. Virtually every PC today has one or more USB ports, quickly moving the installed base of USB-capable PCs to the range of hundreds of millions.
The term “endpoint” refers to the logical measure of a port. Each USB device has a certain number of endpoints. If there is a need to send a certain type of data, an endpoint is allocated. If data is to be sent at other speeds then another endpoint is allocated. In this manner, one or more logical connections are made between a USB host, which may be located, for example, on a motherboard of a PC, and a USB client.
USB typically uses 15 programmable endpoints and one non-programmable endpoint, and uses one configuration at a time. In current USB client controllers each endpoint is allocated a fixed, exclusive memory block for storage of endpoint data. In this manner, the number of bytes of memory needed in the limited amount of endpoint memory is the maximum packet size of each endpoint, and is two times the maximum packet size of each endpoint if the endpoints are double-buffered. In some implementations the maximum packet size of the endpoints may be limited in an effort to reduce the size of the required memory. However, since USB protocol requires that the endpoints in the current configuration, the current interface(s), and the current selected alternate interface(s) being used by the host controller may be accessed, the portion of endpoint memory that is not assigned to endpoints in the current configuration is not used.